//
//  STUserAccountVM.m
//  OCVVeibo
//
//  Created by leergou on 16/7/23.
//  Copyright © 2016年 WhiteHouse. All rights reserved.
//

#import "STUserAccountVM.h"


// 这个 viewModl 为获取授权以及用户信息 服务,即主要为 OAuthController 服务,要用单例,为外部提供数据,如果出现多个对象,会导致数据提供有误
@implementation STUserAccountVM

#pragma mark - 获取账号
- (void)loadUserAccountDataWithCode:(NSString *)code isSuccess:(void(^)(BOOL isSuccess))isSuccess{
    
    [[STNetworkTools sharedTools] oahtLoadUserAccountWithCode:code success:^(id response) {
        // response 中包含 token
        // 转模型
        STUserAccountDTO *userAccount = [STUserAccountDTO yy_modelWithDictionary:response];
        
//        NSLog(@"userAccount:%@",userAccount);
        // 根据 token 请求用户信息
        [self loadUserInfoWithUserAccountDTO:userAccount isSuccess:isSuccess];
        
    } failure:^(NSError *error) {
        NSLog(@"error:%@",error);
    }];
}

#pragma mark - 获取用户信息
- (void)loadUserInfoWithUserAccountDTO:(STUserAccountDTO *)userAccountDTO isSuccess:(void(^)(BOOL isSuccess))isSuccess{
    
    [[STNetworkTools sharedTools] oahtLoadUserInfoWithUserAccount:userAccountDTO success:^(id response) {
        
        // 取出其中的用户昵称 和用户头像,存入模型-现在模型中添加相应的 key
        userAccountDTO.avatar_large = response[@"avatar_large"];
        userAccountDTO.screen_name = response[@"screen_name"];
        
        // 归档
        [self saveUserAccount:userAccountDTO];
        
        isSuccess(true);
        
    } failure:^(NSError *error) {
        NSLog(@"error:%@",error);
    }];
}
#pragma mark - 归档
- (void)saveUserAccount:(STUserAccountDTO *)userAccount{
    
    [NSKeyedArchiver archiveRootObject:userAccount toFile:kFilePath(@"userData.archiver")];
    
    // 解决第一次运行跳转 bug,在跳转前,给 记录是否登录的标记赋值-给 self.usreAccountDTO赋值即可
//    NSLog(@"%@",userAccount);
    self.userAccountDTO = userAccount;
}

#pragma mark - 获取本地保存的数据
- (STUserAccountDTO *)getUserAccount{
    
    STUserAccountDTO *userAccountDTO = [NSKeyedUnarchiver unarchiveObjectWithFile:kFilePath(@"userData.archiver")];
    return userAccountDTO;
}


#pragma mark - 重写方法
// accessToken
- (NSString *)accessToken{
    
    // 判断是否过期,返回 accessToken
    //  self.userAccountDTO.access_token 为空 或者 不为空 但是过期 返回nil
    if (self.userAccountDTO.access_token) {
        // 判断是否过期
        if ([self.userAccountDTO.expires_date compare:[NSDate date]] == NSOrderedDescending) {
            // 没过期
            return self.userAccountDTO.access_token;
        } else{
            // 过期
            return nil;
        }
    } else {
    //  self.userAccountDTO.access_token 不为空 且不过期 返回 accessToken
        return nil;
    }
}

// isLogin
- (BOOL)isLogin{
//    NSLog(@"userAccountVM->%d", self.accessToken != nil);
    return self.accessToken != nil;
}

// init
- (instancetype)init
{
    self = [super init];
    if (self) {
        self.userAccountDTO = [self getUserAccount];
    }
    return self;
}

#pragma mark - 单例
+ (instancetype)sharedUserAccountTools{
    static STUserAccountVM *instance;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[STUserAccountVM alloc] init];
    });
    return instance;
}

@end















